#!/bin/bash

# 青龙面板 - 微信分发阅读平台一键拉库脚本
# 专为青龙面板环境设计
# 作者: MiniMax Agent
# 版本: v1.0.0

set -e

# 青龙面板环境变量
QL_DIR=${QL_DIR:-"/ql"}
SCRIPTS_DIR="${QL_DIR}/scripts"
REPO_NAME="wechat-reading-platform"
REPO_URL="https://gitee.com/17503995945/wechat-reading-platform.git"

# 颜色输出
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m'

log() {
    echo -e "${GREEN}[$(date '+%Y-%m-%d %H:%M:%S')] $1${NC}"
}

warn() {
    echo -e "${YELLOW}[$(date '+%Y-%m-%d %H:%M:%S')] 警告: $1${NC}"
}

error() {
    echo -e "${RED}[$(date '+%Y-%m-%d %H:%M:%S')] 错误: $1${NC}"
}

# 检查青龙面板环境
check_ql_environment() {
    log "检查青龙面板环境..."
    
    if [ ! -d "$QL_DIR" ]; then
        error "青龙面板目录不存在: $QL_DIR"
        exit 1
    fi
    
    if [ ! -d "$SCRIPTS_DIR" ]; then
        warn "脚本目录不存在，创建: $SCRIPTS_DIR"
        mkdir -p "$SCRIPTS_DIR"
    fi
    
    # 检查必要的命令
    for cmd in git node npm; do
        if ! command -v $cmd &> /dev/null; then
            error "命令 $cmd 未安装"
            exit 1
        fi
    done
    
    log "青龙面板环境检查完成"
}

# 克隆或更新仓库
clone_or_update_repo() {
    local repo_path="$SCRIPTS_DIR/$REPO_NAME"
    
    log "处理仓库: $REPO_URL"
    
    if [ -d "$repo_path/.git" ]; then
        log "仓库已存在，更新中..."
        cd "$repo_path"
        git pull origin master 2>/dev/null || warn "拉取更新失败"
    else
        log "克隆仓库中..."
        git clone "$REPO_URL" "$repo_path"
        cd "$repo_path"
    fi
    
    log "仓库处理完成"
}

# 安装依赖
install_dependencies() {
    log "安装项目依赖..."
    
    if [ -f "package.json" ]; then
        npm install axios --no-save 2>/dev/null || {
            warn "npm安装失败，尝试使用yarn"
            yarn add axios 2>/dev/null || error "依赖安装失败"
        }
        log "依赖安装完成"
    else
        error "未找到package.json文件"
        exit 1
    fi
}

# 设置文件权限
setup_permissions() {
    log "设置文件权限..."
    
    # 设置执行权限
    find . -name "*.sh" -exec chmod +x {} \;
    find . -name "*.js" -exec chmod +x {} \; 2>/dev/null || true
    
    log "权限设置完成"
}

# 配置青龙面板任务
setup_qinglong_tasks() {
    log "配置青龙面板任务..."
    
    # 创建任务配置
    cat > "${SCRIPTS_DIR}/${REPO_NAME}_tasks.json" << 'EOF'
{
  "tasks": [
    {
      "name": "微信阅读平台-主脚本",
      "command": "ql task wechat_reading_crawler.js",
      "schedule": "0 */2 * * *",
      "description": "每2小时执行一次主脚本，完整功能"
    },
    {
      "name": "微信阅读平台-定时任务",
      "command": "ql task wechat_reading_crawler.js schedule",
      "schedule": "0 */3 * * *",
      "description": "每3小时执行一次定时任务模式"
    },
    {
      "name": "微信阅读平台-检查登录",
      "command": "ql task wechat_reading_crawler.js checkLoginStatus",
      "schedule": "0 * * * *",
      "description": "每小时检查一次登录状态"
    }
  ]
}
EOF

    # 创建任务说明文件
    cat > "${SCRIPTS_DIR}/${REPO_NAME}_setup.md" << 'EOF'
# 微信分发阅读平台 - 青龙面板配置

## 自动配置的任务

### 1. 主脚本执行
- **命令**: `ql task wechat_reading_crawler.js`
- **规则**: `0 */2 * * *` (每2小时执行)
- **描述**: 执行完整功能，包括登录检查、内容获取、任务执行

### 2. 定时任务模式
- **命令**: `ql task wechat_reading_crawler.js schedule`
- **规则**: `0 */3 * * *` (每3小时执行)
- **描述**: 专门用于定时任务的轻量级执行

### 3. 登录状态检查
- **命令**: `ql task wechat_reading_crawler.js checkLoginStatus`
- **规则**: `0 * * * *` (每小时执行)
- **描述**: 快速检查登录状态和二维码更新

## 手动添加任务

1. 进入青龙面板管理界面
2. 点击"定时任务" → "添加任务"
3. 复制上述命令和规则
4. 设置任务描述
5. 保存并启用任务

## 首次使用

1. 手动执行主脚本: `ql task wechat_reading_crawler.js`
2. 扫描生成的二维码进行微信登录
3. 验证登录状态: `ql task wechat_reading_crawler.js checkLoginStatus`
4. 启用自动定时任务

## 文件位置

- 脚本目录: `/ql/scripts/wechat-reading-platform/`
- 数据文件: 脚本执行目录下的 `wechat_data.json`
- 二维码: 脚本执行目录下的 `qrcode.png`
- 错误日志: 脚本执行目录下的 `error.log`
EOF

    log "青龙面板任务配置完成"
}

# 验证安装
verify_installation() {
    log "验证安装..."
    
    # 检查关键文件
    local required_files=("wechat_reading_crawler.js" "config.json" "package.json")
    for file in "${required_files[@]}"; do
        if [ ! -f "$file" ]; then
            error "缺少必要文件: $file"
            exit 1
        fi
    done
    
    # 测试模块加载
    if node -e "require('./wechat_reading_crawler.js')" 2>/dev/null; then
        log "脚本模块加载正常"
    else
        warn "脚本模块可能存在问题"
    fi
    
    log "安装验证完成"
}

# 显示完成信息
show_completion_info() {
    echo ""
    echo -e "${GREEN}======================================"
    echo "🎉 微信分发阅读平台安装完成!"
    echo "======================================${NC}"
    echo ""
    echo -e "${BLUE}📋 安装信息:${NC}"
    echo "  仓库地址: $REPO_URL"
    echo "  安装路径: $SCRIPTS_DIR/$REPO_NAME"
    echo "  配置文件: $SCRIPTS_DIR/${REPO_NAME}_tasks.json"
    echo "  使用说明: $SCRIPTS_DIR/${REPO_NAME}_setup.md"
    echo ""
    echo -e "${BLUE}🚀 快速开始:${NC}"
    echo "  1. 进入脚本目录: cd $SCRIPTS_DIR/$REPO_NAME"
    echo "  2. 执行主脚本: node wechat_reading_crawler.js"
    echo "  3. 扫描二维码登录微信"
    echo "  4. 在青龙面板中添加定时任务"
    echo ""
    echo -e "${BLUE}📞 技术支持:${NC}"
    echo "  平台客服: QQ 3802451151"
    echo "  开发者: MiniMax Agent"
    echo "  版本: v1.0.0"
    echo ""
}

# 主函数
main() {
    echo -e "${BLUE}"
    echo "======================================"
    echo "🚀 青龙面板 - 微信分发阅读平台"
    echo "======================================"
    echo -e "${NC}"
    
    # 步骤1: 检查环境
    check_ql_environment
    
    # 步骤2: 克隆/更新仓库
    clone_or_update_repo
    
    # 步骤3: 安装依赖
    install_dependencies
    
    # 步骤4: 设置权限
    setup_permissions
    
    # 步骤5: 配置青龙任务
    setup_qinglong_tasks
    
    # 步骤6: 验证安装
    verify_installation
    
    # 步骤7: 显示完成信息
    show_completion_info
}

# 帮助信息
show_help() {
    echo -e "${BLUE}青龙面板 - 微信分发阅读平台一键拉库${NC}"
    echo ""
    echo "用法: $0 [选项]"
    echo ""
    echo "选项:"
    echo "  -h, --help     显示帮助信息"
    echo "  -v, --version  显示版本信息"
    echo ""
    echo "环境变量:"
    echo "  QL_DIR         青龙面板目录 (默认: /ql)"
    echo "  SCRIPTS_DIR    脚本目录 (默认: /ql/scripts)"
    echo ""
    echo "示例:"
    echo "  $0                    # 标准安装"
    echo "  QL_DIR=/opt/ql $0     # 自定义青龙目录"
    echo ""
}

# 版本信息
show_version() {
    echo "微信分发阅读平台 - 一键拉库脚本"
    echo "版本: v1.0.0"
    echo "作者: MiniMax Agent"
    echo "日期: 2025-11-06"
}

# 参数处理
case "${1:-}" in
    "-h"|"--help")
        show_help
        exit 0
        ;;
    "-v"|"--version")
        show_version
        exit 0
        ;;
    "")
        main
        ;;
    *)
        error "未知参数: $1"
        echo "使用 -h 或 --help 查看帮助"
        exit 1
        ;;
esac